import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Esta clase representa a una puerta. Es el primer objeto que el usuario observa y
 * se encarga de abrir o cerrar el juego.
 * 
 * @author Miguel Martinez Aguilar
 * @version 15 de Mayo del 2013
 */
public class Puerta extends Actor
{
    // Declaracion de variables de instancia
    private Imagen[] puerta;// es un arreglo de 2 imagenes que simulan una puerta.
    private Timon timon;// es un boton que simula un timon.
    private static final int dist = 25;// es la distancia que se dezplasa el escenario cada ciclo.
    private boolean abrir;// es un boleano que indica si la puerta esta abierta o cerrada.
    private boolean seMueve;// es un boleano que indica si la puerta esta en movimiento.
    private int aux;// es un contador auxiliar para conocer el limite de movimiento de la puerta.
    private int cont;// es un contador que permite hacer mas rapido o mas lento el abrir de la puerta.
    private InicioP[] boton;// es un arreglo de 4 botones del menu principal.
    private ScrollWorld mundo;// es una referencia al mundo del escenario movible.
    private Panel panel;// es un Actor panel.
    
    /**
     * Este es el metodo constructor de Puerta.
     * @param mundo: un parametro que haga referencia al escenario movible.
     */
    public Puerta(ScrollWorld mundo) 
    {
        puerta = new Imagen[2];
        puerta[0] = new Imagen("puerta0.png");
        puerta[1] = new Imagen("puerta1.png");
        timon = new Timon(this);
        abrir =true;
        seMueve = false;
        aux = 0;
        cont = 0;
        boton = new InicioP[4];
        boton[0] = new InicioP("jugar",0,this);
        boton[1] = new InicioP("instrucciones",1,this);
        boton[2] = new InicioP("creditos",2,this);
        boton[3] = new InicioP("salir",3,this);
        this.mundo = mundo;
        panel = null;
    } 
    
    /**
     * Este metodo abre o cierra la puerta si su movimiento se activa.
     */
    public void act() 
    {
        if(seMueve){
            if(cont == 1){
                if(abrir){
                    puerta[0].move(-20);
                    puerta[1].move(20);
                }
                else{
                    puerta[0].move(20);
                    puerta[1].move(-20);
                }
                aux++;
                if(aux == 19){
                    seMueve = false;
                    if(abrir){
                        abrir = false;
                        this.nuevaEscena();
                    }
                    else{
                        abrir = true;
                        this.agregaTimon();
                    }
                    aux = 0;
                }
                cont = 0;
            }
            else cont++;
        }
    }
    
    /**
     * Este metodo prepara otros elementos del inicio de la puerta.
     */
    public void prepara() 
    {
        World escena = super.getWorld();
        escena.addObject(puerta[0],187,250);
        escena.addObject(puerta[1],512,250);
        escena.setPaintOrder(Puerta.class);
        mundo.addObject(timon,350,350);
    } 
    
    /**
     * Este metodo activa el movimiento de la puerta
     */
    public void activar() 
    {
        seMueve = true;
    } 
    
    /**
     * Este metodo agrega los botones del menu principal.
     */
    public void nuevaEscena() 
    {
        mundo.setPaintOrder(Puerta.class);
        mundo.addObject(boton[0],200,250);
        mundo.addObject(boton[1],500,250);
        mundo.addObject(boton[2],200,400);
        mundo.addObject(boton[3],500,400);
    } 
    
    /**
     * Este metodo quita los botones del menu principal y cierra la puerta.
     */
    public void cerrarPuerta() 
    {
        this.quitarBotones();
        seMueve = true;
    } 
    
    /**
     * Este metodo agrega nuevamente el timon.
     */
    public void agregaTimon() 
    {
        timon = new Timon(this);
        mundo.addObject(timon,350,350);
    } 
    
    /**
     * Este metodo quita los botones del menu principal
     */
    public void quitarBotones() 
    {
        mundo.removeObject(boton[0]);
        mundo.removeObject(boton[1]);
        mundo.removeObject(boton[2]);
        mundo.removeObject(boton[3]);
    } 
    
    /**
     * Este metodo asigna un panel a la puerta
     * @param panel: el panel que se le asignara a la puerta.
     */
    public void asignaPanel(Panel panel) 
    {
        this.panel = panel;
    }
    
    /**
     * Este metodo borra un panel
     */
    public void borraPanel() 
    {
        if(panel != null)panel.borraTodo();
    }
}
